#ifndef KPEXTOPIMGCPYF32C1_H
#define KPEXTOPIMGCPYF32C1_H

#include "kpextVkContext.h"
#include "kpextBaseCompute.h"

namespace kpext {

/**
 * @brief 32位单精度浮点数图像复制操作
 */
class OpImgCpyF32C1 : public BaseCompute
{
public:
    explicit OpImgCpyF32C1(kpextVkContext * ctx);
    virtual ~OpImgCpyF32C1() override;


    /**
     * @brief  重新构建计算管线及相关资源
     * @param inputCols  输入二维图像的列数
     * @param inputRows  输入二维图像的行数
     * @param outputCols  输出二维图像的列数
     * @param outputRows  输出二维图像的行数
     * @param inbuf  输入缓冲
     * @param outbuf  输出缓冲
     */
    virtual void rebuild(int inputCols,
                         int inputRows,
                         int outputCols,
                         int outputRows,
                         std::shared_ptr<BaseBuffer> inbuf,
                         std::shared_ptr<BaseBuffer> outbuf
                         );

protected:
    /**
     * @brief 输入输出尺寸
     */
    uint32_t m_inputCols;
    uint32_t m_inputRows;
    uint32_t m_outputCols;
    uint32_t m_outputRows;

    /**
     * @brief 计算着色器的work group size
     */
    std::array<uint32_t, 3> m_workGroupSize;

private:
    using BaseCompute::rebuild;


}; //kpextOpImgCpyF32C1

} // namespace kpext

#endif // KPEXTOPIMGCPYF32C1_H
